//#include <stdio.h>
//#include <assert.h>
//
//size_t my_strlen_counter(const char* str) {
//    assert(str != NULL); 
//    size_t count = 0;
//    while (*str != '\0') {
//        count++;
//        str++;
//    }
//    return count;
//}
//int main() {
//    const char* test_str = "Hello, World!";
//    const char* empty_str = "";
//
//    printf("计数器实现:\n");
//    printf("'%s' 长度: %zu\n", test_str, my_strlen_counter(test_str));
//    printf("空字符串长度: %zu\n\n", my_strlen_counter(empty_str));
//}

//#include <stdio.h>
//#include <assert.h>
//
//
//char* my_strcpy(char* dest, const char* src) {
//    assert(dest != NULL && src != NULL); 
//
//    char* ret = dest;  
//    while ((*dest++ = *src++) != '\0') {
//    }
//    return ret;
//}
//
//int main() {
//
//    char dest1[20];
//    char dest2[20];
//    char dest3[20];
//
//    const char* src1 = "Hello, World!";
//    const char* src2 = "";
//    const char* src3 = "C Programming";
//
//
//    printf("常规实现:\n");
//    printf("复制前: dest1 = %s\n", dest1);
//    char* result1 = my_strcpy(dest1, src1);
//    printf("复制后: dest1 = %s, 返回值: %s\n\n", dest1, result1);
//}

//#include <stdio.h>
//#include <assert.h>
//
//
//char* my_strcat(char* dest, const char* src) {
//    assert(dest != NULL && src != NULL); 
//
//    char* ret = dest;  
//
//
//    while (*dest != '\0') {
//        dest++;
//    }
//
//   
//    while ((*dest++ = *src++) != '\0') {
//       
//    }
//
//    return ret;
//}
//int main() {
//
//    char str1[50] = "Hello, ";
//    char str2[50] = "";
//    char str3[50] = "Start";
//
//    const char* append1 = "World!";
//    const char* append2 = "Empty string test";
//    const char* append3 = "->End";
//
//    printf("标准实现:\n");
//    printf("追加前: \"%s\"\n", str1);
//    char* result1 = my_strcat(str1, append1);
//    printf("追加后: \"%s\", 返回值: \"%s\"\n\n", str1, result1);
//}

#include <stdio.h>
#include <assert.h>


int my_strcmp(const char* str1, const char* str2) {
    assert(str1 != NULL && str2 != NULL); 

    while (*str1 == *str2) {
        if (*str1 == '\0') {
            return 0; 
        }
        str1++;
        str2++;
    }

  
    return (int)((unsigned char)*str1 - (unsigned char)*str2);
}
int main() {

    const char* test1_str1 = "apple";
    const char* test1_str2 = "apple";

    const char* test2_str1 = "apple";
    const char* test2_str2 = "apples";

    const char* test3_str1 = "banana";
    const char* test3_str2 = "apple";

    const char* test4_str1 = "Apple";
    const char* test4_str2 = "apple";

    const char* test5_str1 = "";
    const char* test5_str2 = "";

    const char* test6_str1 = "short";
    const char* test6_str2 = "shorter";

    printf("基本实现:\n");
    printf("比较 '%s' 和 '%s': %d\n", test1_str1, test1_str2, my_strcmp(test1_str1, test1_str2));
    printf("比较 '%s' 和 '%s': %d\n", test2_str1, test2_str2, my_strcmp(test2_str1, test2_str2));
    printf("比较 '%s' 和 '%s': %d\n\n", test3_str1, test3_str2, my_strcmp(test3_str1, test3_str2));
}